
using System;

namespace BeeTest
{
	public class AndGivenState<T0>
	{
		#region Field & Properties

		internal T0 state0;

		public ReturnGivenState<T0> Returns
		{
			get
			{
				return new ReturnGivenState<T0>(this.state0);
			}
		}

		#endregion


		#region Constructors

		public AndGivenState(T0 s0)
		{
			this.state0 = s0;
		}

		#endregion


		#region Operations

		public GivenState<T0> Given(Action<T0> givenFunc)
		{
			givenFunc(this.state0);	
			var state = new GivenState<T0>(this.state0);  
			return state;
		}


		public GivenState<T0> Given<TP0>(Action<T0, TP0> givenFunc, TP0 arg0)
		{
			givenFunc(this.state0, arg0);	
			var state = new GivenState<T0>(this.state0);  
			return state;
		}


		public GivenState<T0> Given<TP0, TP1>(Action<T0, TP0, TP1> givenFunc, TP0 arg0, TP1 arg1)
		{
			givenFunc(this.state0, arg0, arg1);	
			var state = new GivenState<T0>(this.state0);  
			return state;
		}


		public GivenState<T0> Given<TP0, TP1, TP2>(Action<T0, TP0, TP1, TP2> givenFunc, TP0 arg0, TP1 arg1, TP2 arg2)
		{
			givenFunc(this.state0, arg0, arg1, arg2);	
			var state = new GivenState<T0>(this.state0);  
			return state;
		}


		public GivenState<T0> Given<TP0, TP1, TP2, TP3>(Action<T0, TP0, TP1, TP2, TP3> givenFunc, TP0 arg0, TP1 arg1, TP2 arg2, TP3 arg3)
		{
			givenFunc(this.state0, arg0, arg1, arg2, arg3);	
			var state = new GivenState<T0>(this.state0);  
			return state;
		}


		public GivenState<T0> Given<TP0, TP1, TP2, TP3, TP4>(Action<T0, TP0, TP1, TP2, TP3, TP4> givenFunc, TP0 arg0, TP1 arg1, TP2 arg2, TP3 arg3, TP4 arg4)
		{
			givenFunc(this.state0, arg0, arg1, arg2, arg3, arg4);	
			var state = new GivenState<T0>(this.state0);  
			return state;
		}


		public GivenState<T0> Given<TP0>(Action<TP0> givenFunc, Func<GivenState<T0>, TP0> forwarder0)
		{
			var arg0 = forwarder0(new GivenState<T0>(this.state0));
			givenFunc(arg0);
			var state = new GivenState<T0>(this.state0);
			return state;
		}


		public GivenState<T0> Given<TP0, TP1>(Action<TP0, TP1> givenFunc, Func<GivenState<T0>, TP0> forwarder0, TP1 arg1)
		{
			var arg0 = forwarder0(new GivenState<T0>(this.state0));
			givenFunc(arg0, arg1);
			var state = new GivenState<T0>(this.state0);
			return state;
		}


		public GivenState<T0> Given<TP0, TP1, TP2>(Action<TP0, TP1, TP2> givenFunc, Func<GivenState<T0>, TP0> forwarder0, TP1 arg1, TP2 arg2)
		{
			var arg0 = forwarder0(new GivenState<T0>(this.state0));
			givenFunc(arg0, arg1, arg2);
			var state = new GivenState<T0>(this.state0);
			return state;
		}


		public GivenState<T0> Given<TP0, TP1, TP2, TP3>(Action<TP0, TP1, TP2, TP3> givenFunc, Func<GivenState<T0>, TP0> forwarder0, TP1 arg1, TP2 arg2, TP3 arg3)
		{
			var arg0 = forwarder0(new GivenState<T0>(this.state0));
			givenFunc(arg0, arg1, arg2, arg3);
			var state = new GivenState<T0>(this.state0);
			return state;
		}


		public GivenState<T0> Given<TP0, TP1, TP2, TP3, TP4>(Action<TP0, TP1, TP2, TP3, TP4> givenFunc, Func<GivenState<T0>, TP0> forwarder0, TP1 arg1, TP2 arg2, TP3 arg3, TP4 arg4)
		{
			var arg0 = forwarder0(new GivenState<T0>(this.state0));
			givenFunc(arg0, arg1, arg2, arg3, arg4);
			var state = new GivenState<T0>(this.state0);
			return state;
		}



		#endregion
	}
}

